package com.elric.mall.service;

import com.elric.mall.dto.ProgrammeManageDto;
import com.elric.mall.dto.ProgrammeProjectDto;
import com.elric.mall.dto.ProgrammeProjectExportDto;
import com.elric.mall.dto.ProgrammeProjectImportDto;
import com.elric.mall.enums.ImportType;
import com.elric.mall.model.ProgrammeProject;
import com.elric.mall.model.UmsAdmin;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import java.util.List;
import java.util.Map;

/**
 * 实现功能：计划项目服务层
 *
 * @author 作者[Yuxuan.he]
 * @version 1.0.00  2021-09-16 11:14
 */
public interface ProgrammeProjectService {

    /**
     * 创建
     */
    int create(ProgrammeProject programmeProject);

    /**
     * 更新
     */
    int update(ProgrammeManageDto programmeProject);

    /**
     * 保存项目信息统一接口，不区分create或者update
     * @param dto
     * @param umsAdmin
     * @return
     */
    ProgrammeProjectDto save(ProgrammeProjectDto dto, UmsAdmin umsAdmin);

    /**
     * 根据ID获取详情
     */
    ProgrammeProjectDto findById(String id);

    /**
     * 根据ID删除
     */
    int delete(String id);

    /**
     * 分页查询
     */
    List<ProgrammeProject> list(Integer pageSize, Integer pageNum, ProgrammeProject programmeProject);

    /**
     * 计划项目治理分页查询
     * @param pageSize
     * @param pageNum
     * @param programmeProject
     * @return
     */
    List<ProgrammeManageDto> findManageByPage(Integer pageSize, Integer pageNum, ProgrammeManageDto programmeProject);

    /**
     * 计划项目查询统计接口
     * @param programmeProject
     * @return
     */
    Map<String, Object> manageStatistics(ProgrammeManageDto programmeProject);

    List<ProgrammeProjectExportDto> findExportByModel(ProgrammeProject programmeProject);


    /**
     * 根据任务-大单位id查询其中的项目清单
     * @param id
     * @return
     */
    List<ProgrammeProject> findProjectByTaskUnitId(String id);

    /**
     * excel导入
     * @param request
     * @return
     */
    List<ProgrammeProjectImportDto> importDocuments(MultipartHttpServletRequest request);

    /**
     * 异构excel导入
     * @param request
     * @return
     */
    List<ProgrammeProjectImportDto> importHDocuments(MultipartHttpServletRequest request);

    /**
     * 批量插入
     * @param list
     * @param importType
     * @return
     */
    int insertBatch(List<ProgrammeProject> list, ImportType importType);

    /**
     * 根据excel模板批量导入
     * @param list
     * @param umsAdmin
     * @param importType
     * @return
     */
    int insertExcelBatch(List<ProgrammeProjectImportDto> list, UmsAdmin umsAdmin, ImportType importType);

    /**
     * 数据治理
     */
    void validateData();

    /**
     * 任务数据导入
     * @param list
     * @param umsAdmin
     * @param importType
     * @param taskUnitId
     */
    void insertTaskBatch(List<ProgrammeProjectImportDto> list, UmsAdmin umsAdmin, ImportType importType, String taskUnitId);
}
